// pages/setting/setting.js

Page({
  data: {
    // 是否展示宿舍成员列表
    showMemberList: false,
    // 当前宿舍成员列表
    memberList: [],
    dormitoryavatar: '',
    dormitoryname: '',
    dormitorynickname: '',
    filePath: '',
    newDormitoryName: '',
    newDormitoryNickName: '',
    membersVisible: false, // 控制宿舍成员列表的显示与隐藏
    dormitoryMembers: [ /* 包含宿舍成员信息的数组 */ ],
    classIcon: "cuIcon-unfold text-red"

  },
  onShareAppMessage: function (res) {
    const app = getApp(); // 获取小程序实例
    console.log("分享：" + app.globalData.dormitoryId);
    const dormitoryId = app.globalData.dormitoryId; // 获取当前用户的dormitoryId
    console.log(dormitoryId)
    if (res.from === 'button') {
      // 来自页面内转发按钮
      console.log(res.target)
    }
    return {
      title: '邀请加入宿舍',
      path: 'pages/start/start?dormitoryId=' +dormitoryId, // 将dormitoryId作为参数附加到分享链接中
      success: function (res) {
        // 转发成功
        console.log("转发成功:", res)
      },
      fail: function (res) {
        // 转发失败
        console.log("转发失败:", res)
      }
    }
  },
  getavatarandname() {
    // 添加宿舍信息到数据库，如果已存在则不添加
    const db = wx.cloud.database();
    const dormitoryCollection = db.collection('dormitory');
    const app = getApp(); // 获取小程序实例
    const dormitoryId = app.globalData.dormitoryId; // 从小程序实例的全局数据中获取dormitoryId
    dormitoryCollection.where({
      dormitoryId: dormitoryId
    }).get().then(res => {
      this.setData({
        // 将查询到的数据记录里的avatar的值存放到data.dormitoryavatar
        dormitoryavatar: res.data[0].avatar,
        dormitoryname: res.data[0].name
      });
    }).catch(err => {});
  },

  changeDormitoryAvatar() {
    const db = wx.cloud.database();
    const dormitoryCollection = db.collection('dormitory');
    const app = getApp();
    const dormitoryId = app.globalData.dormitoryId;
    wx.chooseImage({
      count: 1,
      success: res => {
        wx.showLoading({
          title: '图片上传中...',
        });
        const tempFilePath = res.tempFilePaths[0]; // 选择图片的临时文件路径
        let suffix = /\.[^\.]+$/.exec(tempFilePath); // 正则表达式，获取文件扩展名

        // 将图片上传到云存储
        wx.cloud.uploadFile({
          cloudPath: new Date().getTime() + suffix,
          filePath: tempFilePath,
          success: uploadRes => {
            // wx.hideLoading(); 
            wx.showToast({
              icon: 'success'
            });
            const newAvatarUrl = uploadRes.fileID; // 获取上传后的文件 ID
            // 将新的头像链接更新到数据库
            dormitoryCollection.where({
              dormitoryId: dormitoryId
            }).update({
              data: {
                avatar: newAvatarUrl
              },
              success: updateRes => {
                console.log('宿舍头像更新成功', updateRes);
                this.setData({
                  dormitoryavatar: newAvatarUrl
                });
                this.onLoad();
                wx.showToast({
                  title: '宿舍头像更新成功',
                  icon: 'success'
                });
              },
              fail: err => {
                wx.showToast({
                  title: '宿舍头像更新失败',
                  icon: 'none'
                });
              }
            });
          },
          fail: err => {
            wx.hideLoading(); // 隐藏加载提示
            wx.showToast({
              title: '图片上传失败',
              icon: 'none'
            });
          }
        });
      },
      fail: console.error
    });
  },

  changeDormitoryName() {
    // 在点击按钮后显示输入框
    this.setData({
      newDormitoryName: '' // 清空输入框中的值
    });
  },
  inputDormitoryName(e) {
    // 监听输入框中的值变化
    this.setData({
      newDormitoryName: e.detail.value // 更新输入框中的值
    });
  },
  confirmChange() {
    // 当用户点击确认修改按钮后执行的操作
    const newDormitoryName = this.data.newDormitoryName;
    // 将新的宿舍昵称更新到数据库
    const db = wx.cloud.database();
    const dormitoryCollection = db.collection('dormitory');
    const app = getApp();
    const dormitoryId = app.globalData.dormitoryId;
    dormitoryCollection.where({
      dormitoryId: dormitoryId
    }).update({
      data: {
        name: newDormitoryName
      },
      success: updateRes => {
        wx.showToast({
          title: '宿舍名更新成功',
          icon: 'success'
        });
        // 更新页面上的宿舍昵称显示
        this.setData({
          dormitoryname: newDormitoryName
        });
      },
      fail: err => {
        console.error('宿舍名更新失败', err);
        wx.showToast({
          title: '宿舍名更新失败',
          icon: 'none'
        });
      }
    });
  },

  changeDormitoryNickName() {
    // 在点击按钮后显示输入框
    this.setData({
      newDormitoryNickName: '' // 清空输入框中的值
    });
  },
  inputDormitoryNickName(e) {
    // 监听输入框中的值变化
    this.setData({
      newDormitoryNickName: e.detail.value // 更新输入框中的值
    });
  },
  confirmChangeNickName() {
    // 当用户点击确认修改按钮后执行的操作
    const newDormitoryNickName = this.data.newDormitoryNickName;
    if (newDormitoryNickName === this.data.dormitorynickname) {
      wx.showToast({
        title: '新昵称与原昵称相同',
        icon: 'none'
      });
      return;
    }
    // 将新的宿舍昵称更新到数据库
    const db = wx.cloud.database();
    const dormitoryCollection = db.collection('dormitory');
    const app = getApp();
    const dormitoryId = app.globalData.dormitoryId;
    const openid = app.globalData.openid; // 这里需要获取要更新名称的用户的openid
    console.log(dormitoryId)
    console.log(openid)
    // 根据dormitoryId和openid来更新成员的名称
    dormitoryCollection.where({
      dormitoryId: dormitoryId,
      "member.openid": openid
    }).get().then(res => {
      const memberList = res.data[0].member; // 获取查询结果中的成员列表
      console.log(memberList); // 检查获取的成员列表

      const memberIndex = memberList.findIndex(member => member.openid === openid);
      console.log(memberIndex);

      if (memberIndex !== -1) {
        const updateData = {};
        updateData[`member.${memberIndex}.name`] = newDormitoryNickName;

        dormitoryCollection.doc(res.data[0]._id).update({
          data: updateData,
          success: updateRes => {
            console.log(updateRes);
            if (updateRes.stats.updated === 1) {
              wx.showToast({
                title: '昵称更新成功',
                icon: 'success'
              });
              // 更新页面上的宿舍昵称显示
              this.setData({
                dormitorynickname: newDormitoryNickName
              });
            } else {
              console.error('未能找到对应的成员进行更新');
              wx.showToast({
                title: '未能找到对应的成员进行更新',
                icon: 'none'
              });
            }
          },
          fail: err => {
            console.error('昵称更新失败', err);
            wx.showToast({
              title: '昵称更新失败',
              icon: 'none'
            });
          }
        });

      } else {
        console.error('未能找到对应的成员进行更新');
        wx.showToast({
          title: '未能找到对应的成员进行更新',
          icon: 'none'
        });
      }
    }).catch(err => {
      console.error('查询成员信息失败', err);
      wx.showToast({
        title: '查询成员信息失败',
        icon: 'none'
      });
    });
  },
  deleteAndExit: function() {
    const db = wx.cloud.database();
    const _ = db.command;
    const openid = getApp().globalData.openid;
    const dormitoryId = getApp().globalData.dormitoryId;
  
    // 删除对应openid的userInfo库
    db.collection('userInfo').where({
      openid: openid
    }).remove()
    .then(res => {
      console.log("成功删除对应openid的userInfo库", res);
    })
    .catch(err => {
      console.error("删除对应openid的userInfo库失败", err);
    });
  
    // 删除对应openid的log记录
    db.collection('log').where({
      openid: openid
    }).remove()
    .then(res => {
      console.log("成功删除对应openid的log记录", res);
    })
    .catch(err => {
      console.error("删除对应openid的log记录失败", err);
    });
  
    // 处理dormitory库
    db.collection('dormitory').where({
      dormitoryId: dormitoryId
    }).get()
    .then(res => {
      if (res.data.length > 0) {
        const members = res.data[0].member.filter(member => member.openid !== openid);
        const total = members.length;
  
        if (total === 0) {
          // 如果删除后 total 为 0，则删除整个宿舍记录
          db.collection('dormitory').doc(res.data[0]._id).remove()
          .then(() => {
            console.log("成功删除整个宿舍记录");
            // 显示退出成功消息
            wx.showToast({
              title: '退出成功',
              icon: 'success',
              duration: 2000,
              complete: () => {
                // 调用小程序 API 强制退出小程序
                setTimeout(() => {
                  wx.navigateBackMiniProgram();
                }, 2000); // 2 秒后执行退出操作
              }
            });
          })
          .catch(err => {
            console.error("删除整个宿舍记录失败", err);
          });
        } else {
          // 更新宿舍成员信息
          db.collection('dormitory').doc(res.data[0]._id).update({
            data: {
              member: members,
            }
          })
          .then(() => {
            console.log("成功更新宿舍成员信息");
            // 显示退出成功消息
            wx.showModal({
              title: '提示',
              content:'已成功退出，请退出小程序并关闭后台',
              confirmColor:'#FA8072',
              complete: () => {
                // 调用小程序 API 强制退出小程序
                setTimeout(() => {
                  wx.exitMiniProgram();
                }, 2000); // 2 秒后执行退出操作
              }
            });
          })
          .catch(err => {
            console.error("更新宿舍成员信息失败", err);
          });
        }
      } else {
        console.error("未找到对应的宿舍记录");
      }
    })
    .catch(err => {
      console.error("查询宿舍记录失败", err);
    });
  },  
  showMembers() {
    const app = getApp();
    const db = wx.cloud.database();
    const dormitoryId = app.globalData.dormitoryId; // 替换为实际的宿舍ID
    // 获取宿舍成员信息
    db.collection('dormitory').where({
      dormitoryId: dormitoryId
    }).field({
      member: true
    }).get().then(membersRes => {
      const members = membersRes.data[0].member;
      console.log(members);
      // 根据成员的openid获取用户信息
      const openidList = members.map(member => member.openid);
      db.collection('userInfo').where({
        openid: db.command.in(openidList)
      }).get().then(userInfoRes => {
        const userInfo = userInfoRes.data;
        // 组合成员信息和用户信息
        const completeMembersInfo = members.map(member => {
          const user = userInfo.find(info => info.openid === member.openid);
          return {
            name: member.name,
            openid: member.openid,
            avatar: user.avatar, // 假设用户信息表中有avatar字段来表示头像
          };
        });

        // 将结果存储到data中以便在页面中使用
        this.setData({
          dormitoryMembers: completeMembersInfo,
          membersVisible: !this.data.membersVisible,
          classIcon: this.data.membersVisible ? "cuIcon-unfold text-red" : "cuIcon-fold text-red"
        });
      }).catch(err => {
        console.error('获取用户信息失败', err);
      });
    }).catch(err => {
      console.error('获取宿舍成员信息失败', err);
    });
    // 获取宿舍成员信息，这里假设您已经从数据库或其他地方获取了宿舍成员的信息并存储在dormitoryMembers中
    // 然后将membersVisible设置为true来显示宿舍成员列表
  },

  onLoad() {
    this.getavatarandname();
  },
  onPullDownRefresh: function () {
    this.onLoad();
  },
});
